=========================================================================
ISTRUZIONI 
========================================================================

La directory WAKEUP comprende i seguenti file

$$ ls WAKEUP/

gruppo-check.pl   README-2a
gruppo.txt        out.check	  
Makefile	  testwakup
agenda.txt



-----------------------------------------------
Descrizione dei file contenuti nel kit
-----------------------------------------------

README-2a		: questo file


gruppo-check.pl		: uno script Perl che controlla il formato del file
			  gruppo.txt prima di effettuare la consegna
			  (NON MODIFICARE -- uguale al primo frammento)

gruppo.txt		: un file di esempio di specifica del gruppo
			  (uguale al primo frammento)
			  (solo 1 studente per gruppo)
			  (deve essere aggiornato con i dati di chi consegna,
			  secondo il formato esemplificato)

Makefile		: makefile per il test finale del frammento e la
			  consegna  
			  (NON MODIFICARE se non nelle parti richieste)


testwakeup 	        : script di test con relativo output 
out.check	          atteso su STDOUT (out.check) 
agenda.txt                e file di dati



------------------------------------------------
Cosa deve essere realizzato per "wakeup"
------------------------------------------------

Questo esercizio prevede la realizzazione di uno script bash (wakeup) che
implementa una agenda estremamente semplificata. Lo script puo' essere
invocato con tre diversi formati

   wakeup file_agenda
   wakeup -d gg/mm/aaaa file_agenda
   wakeup -m mm/aaaa file_agenda

Nel primo caso

   wakeup file_agenda

legge gli appuntamenti registrati in file_agenda e visualizza sullo standard
output quelli rilevanti per la data odierna (il formato del file agenda e'
descritto nella prossima sezione) Ad esempio:

bash:~$ ./wakeup agenda
====>>  Eventi giorno: 13 03 2008  <<====
Telefonare zia Luigina (ore 20:00)
Scrivere a Nadia
bash:~$

Nel secondo caso

  wakeup -d gg/mm/aaaa file_agenda

legge gli appuntamenti registrati in file_agenda e visualizza quelli rilevanti
per la data fornita come parametro all'opzione "-d" (il formato del file
agenda e' descritto nella prossima sezione) Ad esempio:

bash:~$ ./wakeup -d  13/03/2008 agenda
====>>  Eventi giorno: 13 03 2008  <<====
Telefonare zia Luigina (ore 20:00)
Scrivere a Nadia
bash:~$

Nel terzo caso

  wakeup -m mm/aaaa file_agenda

legge gli appuntamenti registrati in file_agenda e visualizza quelli rilevanti
per la data fornita come parametro all'opzione "-m " (il formato del file
agenda e' descritto nella prossima sezione) Ad esempio:

bash:~$ ./wakeup -m  03/2008 agenda
====>> Eventi Marzo 2008 <<====
Ogni giorno: Telefonare zia Luigina (ore 20:00)
Ogni giorno: Scrivere a Nadia
Questo mese: Pagare ISI
Il 03/03/2008: Lezione di piano (ore 11:00)
Il 01/03/2008: Pagare rata macchina
Il 09/03/2008: Compleanno Filippo
Il 09/03/2008: Appuntamento dentista (ore 17:00)
bash:~$

Quando invocato con parametri erronei, opzioni non previste o date
inconsistenti, wakeup stampa su STDERR opportuni messaggi di errore e termina
ritornando un valore diverso da 0 come di consueto.


------------------------------------------------
Formato del file di agenda
------------------------------------------------
Gli appuntamenti vengono salvati in un file con u nnome qualsiasi ed il
seguente formato

gg/mm/aaaa	 hh:mm	 Descrizione
gg/mm/aaaa	 %	 Descrizione

gg  indica il giorno e puo' assumere i seguenti valori:
    - una stringa di due caratteri nell'intervallo [01--31] 
    - oppure la stringa "**" che corrisponde ad un qualsiasi giorno

mm  indica il mese e puo' assumere i seguenti valori:
    - una stringa di due caratteri nell'intervallo [01--12] 
    - oppure la stringa "**" che corrisponde ad un qualsiasi mese

aaaa indica l'anno e puo' assumere i seguenti valori:
    - una stringa di quattro caratteri che corrisponde ad un intero positivo
    - oppure la stringa "****" che corrisponde ad un qualsiasi anno

hh:mm indica l'orario in cui l'evento ha luogo. Se l'orario e' irrilevante
      questo campo puo' essere sostituito dalla stringa "%"

Descrizione e' una stringa di caratteri che termina al primo newline e che
	    puo' contenere carattri bianchi, accenti etc

Ad esempio, l'evento

**/**/****  20:00 Telefonare zia Luigina

significa che tutti i giorni e' necessario telefonare alla zia 
Luigina alle ore 20:00, mentre l'evento

**/02/****    %   Bollo auto

significa che tutti gli anni, nel mese di Febbraio e' necessario provvedere a
pagare il Bollo auto

altri esempi con significato ovvio possono essere trovati nel file "agenda.txt"

----------------------------------------------------------------------------
Apertura, chiusura e lettura di file in BASH
----------------------------------------------------------------------------
L'apertura e la chiusura di un file puo' essere effettuata in bash attreverso
la 'exec' in particolare:

   exec n< file_name    

apre il file file_name in lettura e gli assegna il file descriptor 'n' 

   exec n> file_name

apre il file file_name in scrittura (file descriptor n)

   exec n<> file_name

apre in lettura e scrittura. Invece per chiudere il file descriptor n

   exec n>&-

Dopo aver aperto il file \`e possibile leggerlo utilizzando il comando 'read'
con opzione -u numero_descrittore.

------------------
Come procedere :
-----------------

0) leggere attentamente questo README 

1) analizzare accuratamente lo script ./testwakeup e
   l'ouput atteso su stdout (file out.check)

2) implementare lo script richiesto, con le opportune sottofunzioni in un file
   './wakeup' 
   ed testando incrementalmente il codice prodotto

3) testare infine lo script con il nostro script ./testwakeup eseguendo

       bash:~$ make test

  NOTA: (1) tutti i file sviluppati per la soluzione si devono trovare nella
  directory WAKEUP/
  (2) E' importante che il test venga effettuato solo su uno script gia' ragionevolemnte corretto  altrimenti i risultati possono essere di
  difficile interpretazione, fuorvianti o inutili.

4) preparare la documentazione: ovvero commentare adeguatamente il file che
   contiene la soluzione aggiungendo la dichiarazione di originalita'

   # file: wakeup
   #    \author Nino Bixio
   #  Si dichiara che il contenuto di questo file e' in ogni sua parte opera
   #  originale dell' autore.  

5) aggiornare il file "gruppo.txt" con nome e dati

6) consegnare il file ESCLUSIVAMENTE eseguendo

      bash:~$ make consegna

   e seguendo le istruzioni. 
   Per la consegna e' necessaria l'utility "mpack" installata solo nelle
   macchine dei laboratori H, M ed I. Per consegne da altre macchine e'
   possibile scaricare il binario di 'mpack' dal sito del corso (attenzione:
   richiede che il mailer sia configurato correttamente).


---------------------------------------
 NOTE IMPORTANTI: LEGGERE ATTENTAMENTE
---------------------------------------

1) gli eleborati non consegnati con "make consegna" non verranno accettati

2) tutti gli elaborati verranno confrontati fra di loro con tool automatici
   per stabilire eventali situazioni di PLAGIO. Se tali situazioni si
   verificheranno *tutti* gli elaborato coinvolti verranno annullati con
   conseguente perdita del bonus. 

3) Tutti gli studenti coinvolti in un episodio di PLAGIO comprovato dovranno
   re-implementare il frammento incriminato e saranno sottoposti ad una prova
   orale supplementare. In caso di recidive verranno esclusi dalla
   possibilita' di sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO
   IN CORSO.

4) Chi in sede di orale risulta palesemente non essere l'autore del software
   consegnato in uno dei frammenti verra' escluso dalla possibilita' di
   sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO IN CORSO.

5) Tutti i comportamenti scorretti ai punti 3 e 4 verranno segnalati
   ufficialmente al presidente del corso di laurea, che si riserva di
   decidere azioni disciplinari supplementari a quelle sopra descritte.

----------------------------
 VALUTAZIONE DELL'ESERCIZIO:
----------------------------

Gli studenti che consegnano una versione funzionante e ragionevolmente
corretta di entrambi gli esercizi del secondo frammento
entro la data di scadenza prevista su WEB accumulano un bonus di 2
punti che verra' sommato al voto finale (vedi lucidi lezioni ed
esercitazioni).

La qualita' del codice consegnato per i due esercizi verra' valutata come
parte del progetto finale e contribuira' alla votazione assegnata al progetto.
Eventuali caratteristiche in piu' rispetto a quelle strettamente richieste
dalle specifiche date verranno valutate in questa sede.
